﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;

namespace Vista.Seguridad
{
    public partial class FormUsuarios : Form
    {
        string Op;
        Entidades.Seguridad.Usuario oUsuarioActual;

        public FormUsuarios(string tipooperacion)
        {
            InitializeComponent();
            Op = tipooperacion;
            this.CenterToScreen();
        }
        
        public FormUsuarios(string tipooperacion,Entidades.Seguridad.Usuario oUsuarioAct)
        {
            InitializeComponent();
            oUsuarioActual = oUsuarioAct;
            Op = tipooperacion;

            txtnombreyap.Text = oUsuarioActual.NombreApellido;
            txtusuario.Text = oUsuarioActual.IdUsuario;
            checkEstado.Checked = Convert.ToBoolean(oUsuarioActual.Estado);
            
            txtusuario.Enabled = false;
        }

        private void LlenarGrillaChecked()
        {
            ReadOnlyCollection<Entidades.Seguridad.Grupo> colGrupo = Controladora.Seguridad.CUGestionarusuarios.ObtenerInstancia().ConsultarGrupos();
            ListBoxGrupos.MultiColumn = true;

            
            foreach (Entidades.Seguridad.Grupo grupon in colGrupo)
            {
                //ListBoxGrupos.Items.Add(grupon);
                ListBoxGrupos.Items.Add(grupon.IdGrupo);
            }

            if (Op == "Modificar")
            {
                foreach (Entidades.Seguridad.Grupo gruAct in oUsuarioActual.Grupos)
                {                    
                    int index = ListBoxGrupos.FindString(gruAct.IdGrupo, -1);
                    if (index != -1)
                    {
                        ListBoxGrupos.SetItemChecked(index, true);
                    }
                }
            }
        }

        private void btnguardar_Click(object sender, EventArgs e)
        {
            if (Op == "Agregar")
            {
                Entidades.Seguridad.Usuario oUsuario = new Entidades.Seguridad.Usuario();
                oUsuario.NombreApellido = txtnombreyap.Text;
                oUsuario.IdUsuario = txtusuario.Text;
                oUsuario.Estado = Convert.ToByte(checkEstado.Checked);
                oUsuario.Clave = Encriptar(txtclave.Text);
                oUsuario.Email = txtemail.Text;
                foreach (var item in ListBoxGrupos.CheckedItems)
                {
                    Entidades.Seguridad.Grupo oGrupo = new Entidades.Seguridad.Grupo();
                    oGrupo.IdGrupo = item.ToString();
                    oUsuario.AgregarGrupo(oGrupo);
                }
                Controladora.Seguridad.CUGestionarusuarios.ObtenerInstancia().AgregarUsuario(oUsuario);
                this.Close();
            }
            else if (Op == "Modificar")
            {

                oUsuarioActual.NombreApellido = txtnombreyap.Text;
                oUsuarioActual.Estado = Convert.ToByte(checkEstado.Checked);


                for (int i = 0; i < ListBoxGrupos.Items.Count; i++)
                {
                    string items = ListBoxGrupos.Items[i].ToString();
                    Entidades.Seguridad.Grupo oGrupo = new Entidades.Seguridad.Grupo();
                    oGrupo.IdGrupo = items.ToString();

                    if (ListBoxGrupos.GetItemChecked(i))
                    {
                        var query = from grp in oUsuarioActual.Grupos
                                    where grp.IdGrupo == oGrupo.IdGrupo
                                    select grp.IdGrupo;

                        if (query.Count() == 0)
                        {
                            oUsuarioActual.AgregarGrupo(oGrupo);
                        }
                    }
                    else
                    {
                        var query = from grp in oUsuarioActual.Grupos
                                    where grp.IdGrupo == oGrupo.IdGrupo
                                    select grp.IdGrupo;

                        if (query.Count() != 0)
                        {

                            oUsuarioActual.EliminarGrupo(oGrupo);
                        }
                    }                    

                }
                Controladora.Seguridad.CUGestionarusuarios.ObtenerInstancia().ModificarUsuario(oUsuarioActual);
                this.Close();
            }
        }
        

        private void FormUsuarios_Load(object sender, EventArgs e)
        {
            this.LlenarGrillaChecked();
        }

        private void btncancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private string Encriptar(string valor)
        {
            System.Security.Cryptography.SHA1CryptoServiceProvider provider = new System.Security.Cryptography.SHA1CryptoServiceProvider();
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(valor);
            byte[] inArray = provider.ComputeHash(bytes);
            provider.Clear();
            return Convert.ToBase64String(inArray);
        }
    }
}
